Save / Load Transitions

1 Overview

From version 10.1.0, ReplayBuffer (and its sub-classes) supports save and load transitions (not entire buffer).

Since this functionality is based on Python pickle serialization, you MUST NOT load untrusted file, otherwise you might introduce security vulnerability.

The API are save_transitions(self, file, *, safe=True) and load_transitions(self, file). The file parameter is str. Internally, cpprb utilizes numpy.savez_compressed, so that the file name have to end with ".npz". (If not, automatically the suffix is added.)

1.1 save

When safe=True (default), stored transitions are once dumped with get_all_transitions(), then the well-organized transitions are saved. This is much safer configuration in terms of future compatibility. We highly recommend this whenever you can.

When safe=False and at least one of next_of and stack_compress are enabled, cpprb tries to reduce file size by dumping internal compressed data structure directly. (If none of the options are enabled, it fallbacks to safe=True.) This also saves some internal meta-data for reconstruction of transitions, so that it is possible that file size can be larger than safe=True for small data.

1.2 load

You have to initialize ReplayBuffer with compatible configuration before load transitions, otherwise you will get errors (ValueError, KeyError, etc.) or unintentional silent bug.

load_transitions does not overwrite existing transitions but adds, so that if you want to delete, please call clear() manually.

2 Technical Detail

2.1 v1 format

key value description
safe True or False
version 1
data dict[str, np.ndarray] If safe=True, get_all_transitions(). Otherwise internal buffer.
Nstep True or False
cache dict[int, dict[str, np.ndarray]] or None If safe=True, None. Otherwise internal cache.
next_of np.ndarray or None If safe=True, None. Otherwise internal meta-data for next_of.